package main

/**
Go语言中有丰富的数据类型，除了基本的整型、浮点型、布尔型、字符串外，还有切片、结构体、函数、map、通道（channel）等。
1. 整型
整型可以分成以下两个大类：
按长度分为：int8、int16、int32、int64
对应的无符号整型：uint8、uint16、uint32、uint64
其中，uint8 就是我们熟知的 byte 型

2. 浮点型
Go语言支持两种浮点型数：
float32、float64.
注意：没有float
Go语言的浮点型默认声明为 float64

3. 复数
复数的默认类型是complex128位实数位虚数
还有一种是complex64位实数位虚数

5. 字符串
字符串的两种表示形式：

双引号，会识别转义字符
反引号，不会识别转义字符。以字符串的原生形式输出，包括换行和特殊字符。

6. 字符
字符串中的每一个元素叫做字符，在遍历或者单个获取字符串元素时可以获得字符。
字符用单引号表示.
Go语言的字符有以下两种：
一种是 uint8 类型，或者叫 byte 型，代表了 ASCII码的一个字符。
另一种是 rune 类型，代表一个 UTF-8 字符。当需要处理中文、日文或者其他复合字符时，则需要用到 rune 类型。rune 类型实际是一个 int32。
*/

import "fmt"

func main() {
	// 1. bool 类型
	var a bool
	fmt.Println(a)
	a = true
	fmt.Println(a)

	var b = true
	fmt.Printf("type is %T of b\n", b)
	fmt.Printf("type is %t of b\n", b)

	c := true
	fmt.Println(c)

	// 2.float 类型
	fmt.Println("#########开始测试浮点数#########")
	var f1 float32
	f1 = 3.14
	fmt.Println("f1 = ", f1)
	f2 := 5.65
	fmt.Println("f2 = ", f2)
	// 自动推导类型
	fmt.Printf("type is %T of f2\n", f2) //type is float64 of f2
	// float64 比 float32 精度高
	// 3.字符串类型
	var ch1 = 'a'
	fmt.Printf("ch1  = %d\n", ch1) //97
	fmt.Printf("ch1  = %c\n", ch1) //a
	// 大写转小写
	fmt.Printf("a is %d,A is %d,A大写转小写a:%c", 'a', 'A', 'A'+32)
}
